<!DOCTYPE HTML>
<html>
<head>
<title>标签 | AutoHotkey</title>
<meta name="description" content="Labels identify a line of code, and can be used as Goto targets or to form subroutines." />
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<link href="../static/theme.css" rel="stylesheet" type="text/css" />
<script src="../static/content.js" type="text/javascript"></script>
</head>
<body>

<h1>标签</h1>

<h2 id="toc">目录</h2>
<ul>
  <li><a href="#syntax-and-usage">语法和用法</a></li>
  <li><a href="#subroutines">子程序</a></li>
  <li><a href="#dynamic-labels">动态标签</a></li>
  <li><a href="#hotkeys-and-hotstrings">热键和热字串</a></li>
  <li><a href="#named-loops">命名的循环</a></li>
  <li><a href="#Functions">函数</a></li>
  <li><a href="#related">相关的</a></li>
</ul>

<h2 id="syntax-and-usage">语法和用法</h2>
<p>标签用来标识代码行, 可以作为 <a href="../commands/Goto.htm">Goto</a> 目标或组成<a href="../commands/Gosub.htm">子程序</a>.</p>
<pre class="Syntax">LabelName:</pre>
<p>要创建标签, 请像上面那样写下标签名和冒号. 除了空白字符和注释, 其他代码不能与标签写在同一行.</p>
<p><strong>名称:</strong> 标签名不区分大小写, 且可以由除空格, tab, 逗号以及<a href="../commands/_EscapeChar.htm">转义字符</a>(`) 外的其他字符组成. 然而, 考虑到命名的惯例, 通常最好仅使用字母, 数字和下划线(例如: <em>MyListView</em>, <em>Menu_File_Open</em> 和 <em>outer_loop</em>). 在整个脚本中标签名必须是唯一的.</p>
<p>虽然没有保留的标签名, 但是强烈建议不要使用以下名称: On, Off, Toggle, AltTab, ShiftAltTab, AltTabAndMenu 和 AltTabMenuDismiss. 
这些值对 <a href="../commands/Hotkey.htm">Hotkey 命令</a>有特殊的含义.</p>
<p><strong>目标:</strong> 标签的目标是下一个可执行的代码行. 可执行代码包含命令, 赋值, <a href="../Variables.htm#Expressions">表达式</a>和<a href="../commands/Block.htm">区块</a>, 但不包括指令, 标签, 热键或热字串. 在下面的例子中, <code>run_notepad</code> 和 <code>#n</code> 标签都指向 <code>Run</code> 行:</p>
<pre>run_notepad:
#n::
    Run Notepad
    return
</pre>
<p><strong>执行:</strong> 与指令类似, 正常执行到标签时标签会被忽略. 在下面的例子中, 消息框会显示两次: 一次是在执行 <a href="../commands/Gosub.htm">Gosub</a> 的目标子程序时, 再次是在前面的子程序返回后:</p>
<pre>gosub Label1

Label1:
MsgBox <a href="../Variables.htm#ThisLabel">%A_ThisLabel%</a>
return</pre>

<h2 id="subroutines">子程序</h2>
<p>子程序是一部分代码, 可以对它进行 <em>调用</em> 来执行特定的任务. 子程序的执行从目标标签开始, 一直执行到遇上 <a href="../commands/Return.htm">Return</a> 或 <a href="../commands/Exit.htm">Exit</a>. 由于子程序的结尾决定于流控制, 所以任何标签既作为 Goto 的目标同时也是子程序的开始.</p>

<h2 id="dynamic-labels">动态标签</h2>
<p>接受标签名的许多命令也可以接受<a href="../Variables.htm">变量</a>引用(例如 %MyLabel%), 此时变量中保存了目标标签的名称. 然而, 性能会稍微降低, 因为每次都必须 "查找" 目标标签名而不是只在脚本首次加载时查找一次.</p>

<h2 id="hotkeys-and-hotstrings">热键和热字串</h2>
<p><a href="../Hotkeys.htm">热键</a>和<a href="../Hotstrings.htm#label">热字串标签</a>也可以作为 <a href="../commands/Goto.htm">Goto</a>, <a href="../commands/Gosub.htm">Gosub</a> 以及其他命令的目标. 然而, 如果一个热键或热字串含有多个<a href="../commands/_IfWinActive.htm">变体</a>, 则使用最接近脚本顶部的那个变体. 所有的热键修饰键或热字串选项都是标签名的一部分, 但不包括最后的双冒号(::).</p>

<h2 id="named-loops">命名的循环</h2>
<p>标签还可以用来标识循环, 以便用于 <a href="../commands/Continue.htm">Continue</a> 和 <a href="../commands/Break.htm">Break</a> 命令. 这样脚本可以很方便地继续或退出任意数目的内嵌循环.</p>

<h2 id="Functions">函数</h2>
<p><span class="ver">[v1.1.20+]</span>: <a href="../Functions.htm">函数</a>可以在多种情况下替代原来的标签, 包括:</p>
<ul>
  <li><a href="../commands/Gui.htm#Labels">Gui 事件</a> 比如 GuiClose</li>
  <li><a href="../commands/Gui.htm#label">Gui 控件事件</a>(g-标签)</li>
  <li><a href="../commands/Hotkey.htm#Functor">热键</a></li>
  <li><a href="../commands/Menu.htm#Functor">菜单</a></li>
  <li><a href="../commands/SetTimer.htm#Functor">SetTimer</a></li>
</ul>
<p></p>
<p>函数的好处是它们可以使用本地变量, 在某些情况下(比如 GUI 控件事件), 它们也接受包含有用信息的参数.</p>

<h2 id="related">相关</h2>
<p><a href="../commands/IsLabel.htm">IsLabel()</a>, <a href="../Variables.htm#ThisLabel">A_ThisLabel</a>, <a href="../commands/Gosub.htm">Gosub</a>, <a href="../commands/Goto.htm">Goto</a>, <a href="../commands/OnExit.htm">OnExit</a>, <a href="../commands/SetTimer.htm">SetTimer</a>, <a href="../commands/Hotkey.htm">Hotkey</a>, <a href="../commands/Gui.htm#Labels">Gui 事件</a>, <a href="../commands/Gui.htm#label">g-标签</a>, <a href="../commands/OnClipboardChange.htm">OnClipboardChange</a></p>

</body>
</html>